1

什么是面向对象

把数据和行为(对数据的操作)结合起来,有类的概念,通过类创建任意多个具有相同属性和方法的对象

  • 继承:可以使子类复用父类公开的变量、方法;
  • 封装:屏蔽一系列的细节。使外部调用时只要知道这个方法的存在;
  • 多态:父类的方法继承的到子类以后可以有不同的实现方式;
var Person = {
    name: "wheeler",
    age: 25,
    inMeeting: function () {
        return "I am in Meeting";
    }
};

创建对象

为了避免重复造轮子,产生大量的代码,我们可以使用工厂模式和构造函数模式。
创建对象目前有两种方式:

  • 对象字面量
var Person = {
    name: "wheeler",
    age: 25,
    inMeeting: function () {
        return "I am in Meeting";
    }
};

优点:灵活方便
缺点:每创建一个新的对象都需要写出完整的定义语句,不便于创建大量相同类型的对象,不利于使用继承等高级特性

  • 使用new表达式

主要是配合构造函数使用

function Person(name, age, dream){
    this.name = name;
    this.age = age;
    this.dream = dream;
    this.myDream =function () {
        alert(this.dream);
    }
};
person1 = new Person('wheeler', 25, "哈哈");
person2 = new Person('wheeler2', 26, "嘿嘿");

工厂模式

什么是工厂模式?就是像工厂一样批量创建对象。具体来说,抽象创建具体对象的过程。

var createPerson = function (name, age, dream) {
    var person = {
        name: name,
        age: age,
        dream: function () {
            return dream;
        }
    };
    return person;

};
var person1 = createPerson('wheeler', 25, "哈哈");
var person2 = createPerson('wheeler2', 26, "嘿嘿");

构造函数模式

ECMAScript 中的构造函数可用来创建特定类型的对象。像Object和Array这样的原生构造函数,在运行时会自动出现在执行环境中。

function Person(name, age, dream){
    this.name = name;
    this.age = age;
    this.dream = dream;
    this.myDream =function () {
        alert(this.dream);
    }
};
var person1 = new Person('wheeler', 25, "哈哈");
var person2 = new Person('wheeler2', 26, "嘿嘿");

以上代码:

  • 没有显式地创建对象;
  • 直接将属性和方法赋给了this对象;
  • 没有return语句。

以这种方式调用构造函数实际上会经历以下4个步骤:

  • 创建一个新对象;
  • 将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
  • 执行构造函数中的代码(为这个新对象添加属性);
  • 返回新对象。

Wheeler
19 声望0 粉丝

今天,你学习了吗?